package priv.pattern.templatemethod.abs;

/*
 * 作者：m鹏h
 * 时间；2024/8/6 22:16
 * 描述：泡制饮料的算法框架
 **/
public abstract class RefreshBeverage {
    //需要声明一个方法：泡制饮料的模板方法
    public final void prepareRecipe() {
        //第一步
        boilWater();
        //第二部
        brew();
        //第三步
        pourInCup();
        if (isCustomerWantsCondiments()) {
            //第四步
            addCondiments();
        }
    }

    //配置一个钩子方法 用于有些不需要的方法子类可以不用重写
    protected boolean isCustomerWantsCondiments() {
        return true;
    }


    // 第一步 烧水
    private void boilWater() {
        System.out.println("烧水");
    }

    //第三步倒入杯中
    private void pourInCup() {
        System.out.println("倒入杯中");
    }

    //第二步 用沸水冲泡的材料不同
    protected abstract void brew();

    //第四步 添加辅料
    protected abstract void addCondiments();
}
